package priotityqeue;
import java.util.PriorityQueue;
import java.util.Comparator;

public class Test4 {
    class Solution {
        public int[] smallestK(int[] arr, int k) {
            if (arr == null || k <= 0 || k > arr.length) {
                return k == 0 ? new int[0] : null;
            }

            PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o1-o2;
                }
            });
                //把前k个元素添加到队列中
                for(int i=0;i<k;i++){
                    queue.offer(arr[i]);
                }
                //继续遍历升剩余的元素，
                for(int i=k;i<arr.length;i++){
                    //与队列顶元素比较
                    int top=queue.peek();
                    if(arr[i]<top){
                        //如果比队列顶元素小，则替换队列顶元素
                        queue.poll();
                        queue.offer(arr[i]);
                        //先poll再offer，是为了保持队列的大小为k
                    }
                }
                //然后再传创建一个数组返回
            int[] result = new int[k];
                for(int i=0;i<k;i++){
                    result[i]=queue.poll();
                }
                return result;
        }

    }
}
